﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using DAL.Entity;
using DAL.Persistencia;


namespace NewTierra.Pages
{
    public partial class AddPeriodo : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                lblSupplier.Text = Convert.ToString(Session["Snome"]);
                LimpaCampos(this.Controls);
                PopulaDropEstacao();
                PopulaDropMercado();
                PopulaDropMoeda();
                PopulaDropQtdNoites();
                PopulaDropBaseTarifaria();
                PopulaDropPromocao();

                if (Request["Tipo"].Equals("edit"))
                    {
                        btnSalvarPeriodo.Visible = false;
                        btnAtualizarPeriodo.Visible = true;
                        BuscaPeriodo(sender, e);
                    }

            }
        }

        #region Popular Drops
        
        void PopulaDropEstacao()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropEstacao.DataSource = n.S_Mercado_Estacao.ToList();
                    DropEstacao.DataValueField = "S_mercado_estacao_id";
                    DropEstacao.DataTextField = "S_mercado_estacao_nome";
                    DropEstacao.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropMercado()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropMercado.DataSource = n.Mercadoes.ToList();
                    DropMercado.DataValueField = "Mercado_id";
                    DropMercado.DataTextField = "Mercado_nome";
                    DropMercado.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropMoeda()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropMoeda.DataSource = n.Moeda.ToList();
                    DropMoeda.DataValueField = "Moeda_id";
                    DropMoeda.DataTextField = "Moeda_sigla";
                    DropMoeda.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropQtdNoites()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropQtdNoites.DataSource = n.MinimoNoites.ToList();
                    DropQtdNoites.DataValueField = "MinimoNoites_id";
                    DropQtdNoites.DataTextField = "MinimoNoites_qtd";
                    DropQtdNoites.DataBind();

                    DropQtdNoites.Items.Insert(0, new ListItem("Nenhuma", "0"));
                }

            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = "Erro. " + ex.Message;
            }

        }

        void PopulaDropBaseTarifaria()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropBaseTarifaria.DataSource = n.BaseTarifarias.ToList();
                    DropBaseTarifaria.DataValueField = "BaseTarifaria_id";
                    DropBaseTarifaria.DataTextField = "BaseTarifaria_nome";
                    DropBaseTarifaria.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropPromocao()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropPromocao.DataSource = n.Promocaos.ToList();
                    DropPromocao.DataValueField = "Promocao_id";
                    DropPromocao.DataTextField = "Promocao_nome";
                    DropPromocao.DataBind();

                    DropPromocao.Items.Insert(0, new ListItem("Nenhuma", "0"));
                }

            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = "Erro. " + ex.Message;
            }
        }

        #endregion

        #region Crud Periodo

        protected void CadastrarPeriodo(object sender, EventArgs e)
        {
            if(txtNomePacote.Text.Length > 100)
            {
                lblMsgAddPeriodo.Text = "Nome do Pacote contém mais de 100 caracteres, o periodo não foi cadastrado.";
                return;
            }

            try
            {

                S_Mercado_Periodo sm = new S_Mercado_Periodo();
                PeriodosDAL d = new PeriodosDAL();

                sm.S_merc_periodo_from  = Convert.ToDateTime(from.Text);
                sm.S_merc_periodo_to    = Convert.ToDateTime(to.Text);
                sm.S_id                 = Convert.ToInt32(Session["Sid"]);
                sm.S_mercado_estacao_id = Convert.ToInt32(DropEstacao.SelectedValue);
                sm.Mercado_id           = Convert.ToInt32(DropMercado.SelectedValue);
                sm.BaseTarifaria_id     = Convert.ToInt32(DropBaseTarifaria.SelectedValue);
                sm.Moeda_id             = Convert.ToInt32(DropMoeda.SelectedValue);

                if (txtNomePacote.Text.Equals(""))
                { sm.Pacote_nome = null; }
                else
                { sm.Pacote_nome = txtNomePacote.Text; }

                if (DropQtdNoites.SelectedValue.Equals("0"))
                { sm.MinimoNoites_id = null; }
                else
                { sm.MinimoNoites_id = Convert.ToInt32(DropQtdNoites.SelectedValue); }

                if (DropPromocao.SelectedValue.Equals("0"))
                { sm.Promocao_id = null; }
                else
                { sm.Promocao_id = Convert.ToInt32(DropPromocao.SelectedValue); }

                d.Salvar(sm);

                LimpaCampos(this.Controls);
                lblMsgAddPeriodo.Text = "Cadastro efetuado com sucesso.";
            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = ex.Message;
            }
        }

        protected void AtualizarPeriodo(object sender, EventArgs e)
        {
            if (txtNomePacote.Text.Length > 100)
            {
                lblMsgAddPeriodo.Text = "Nome do Pacote contém mais de 100 caracteres, o periodo não foi atualizado.";
                return;
            }
            try
            {
                if (Session["PeriodoIDEditar"] == null)
                {
                    lblMsgAddPeriodo.Text = "Favor selecionar um período para ser editado."; return;
                }

                S_Mercado_Periodo mp = new S_Mercado_Periodo();

                mp.S_merc_periodo_id    = Convert.ToInt32(Session["PeriodoIDEditar"]);
                mp.S_merc_periodo_from  = Convert.ToDateTime(from.Text);
                mp.S_merc_periodo_to    = Convert.ToDateTime(to.Text);
                mp.S_id                 = Convert.ToInt32(Session["Sid"]);
                mp.S_mercado_estacao_id = Convert.ToInt32(DropEstacao.SelectedValue);
                mp.Mercado_id           = Convert.ToInt32(DropMercado.SelectedValue);
                mp.BaseTarifaria_id     = Convert.ToInt32(DropBaseTarifaria.SelectedValue);
                mp.Moeda_id             = Convert.ToInt32(DropMoeda.SelectedValue);

                if (txtNomePacote.Text.Equals(""))
                { mp.Pacote_nome = null; }
                else
                { mp.Pacote_nome = txtNomePacote.Text; }

                if (DropQtdNoites.SelectedValue.Equals("0"))
                { mp.MinimoNoites_id = null; }
                else
                { mp.MinimoNoites_id = Convert.ToInt32(DropQtdNoites.SelectedValue); }

                if (DropPromocao.SelectedValue.Equals("0"))
                { mp.Promocao_id = null; }
                else
                { mp.Promocao_id = Convert.ToInt32(DropPromocao.SelectedValue); }

                PeriodosDAL s = new PeriodosDAL();

                s.Atualizar(mp);

                lblMsgAddPeriodo.Text = "Período atualizado com sucesso.";
                LimpaCampos(this.Controls);
                Session.Remove("PeriodoIDEditar");
            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = ex.Message;
            }
        }

        #endregion

        #region Regras
        
        protected void BuscaPeriodo(object sender, EventArgs e)
        {
            try
            {
                PeriodosDAL p = new PeriodosDAL();

                S_Mercado_Periodo mp = p.ObterPorIdMercado(Convert.ToInt32(Session["PeriodoIDEditar"]));

                from.Text = string.Format("{0:dd/MM/yyyy}", mp.S_merc_periodo_from);
                to.Text = string.Format("{0:dd/MM/yyyy}", mp.S_merc_periodo_to);
                DropMercado.SelectedValue = mp.Mercado_id.ToString();
                DropEstacao.SelectedValue = mp.S_mercado_estacao_id.ToString();
                DropMoeda.SelectedValue = mp.Moeda_id.ToString();
                DropBaseTarifaria.SelectedValue = mp.BaseTarifaria_id.ToString();
                txtNomePacote.Text = mp.Pacote_nome;

                if (mp.MinimoNoites_id != null)
                { DropQtdNoites.SelectedValue = mp.MinimoNoites_id.ToString(); }
                else
                { DropQtdNoites.SelectedValue = "0"; }

                if(mp.Promocao_id != null)
                { DropPromocao.SelectedValue = mp.Promocao_id.ToString(); }
                else
                { DropPromocao.SelectedValue = "0"; }

                DropEstacao_SelectedIndexChanged(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = ex.Message;
            }
        }

        protected void DropEstacao_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                MercadoEstacaoDAL me = new MercadoEstacaoDAL();

                if (me.VerificaPacote(Convert.ToInt32(DropEstacao.SelectedValue)))
                {
                    PanelNomePacote.Visible = true;
                }
                else
                {
                    PanelNomePacote.Visible = false;
                }
            }
            catch (Exception ex)
            {
                lblMsgAddPeriodo.Text = ex.Message;
            }
        }

        protected void LimpaCampos(ControlCollection controls)
        {
            foreach (Control ctrl in controls)
            {
                if (ctrl is TextBox)
                {
                    (ctrl as TextBox).Text = string.Empty;
                }
                // ... demais controles que queira limpar

                LimpaCampos(ctrl.Controls);
            }
        }

        #endregion


    }
}